AWS VPC, Subnet 과 Gateway
이전 글에서 VPC, Private Subnet, Public Subnet이 뭔지는 훑어봤고,
이제 자연스럽게 이런 궁금증이 생긴다.
- 사설망인 VPC가 바깥 인터넷이랑은 어떻게 통신하는지
- VPC 안에서 EC2끼리, RDS랑은 어떻게 통신하는지
먼저, VPC를 네트워크 관점에서 다시 보기
VPC를 네트워크 용어로 풀어보면 대충 이렇게 묶인다.
- CIDR:
10.0.0.0/16이런 식으로 IP 대역을 표현하는 방식 - VPC: 이 CIDR 대역을 통째로 쓰는 내 회사 전용 사설망 하나
- Subnet: 그 VPC CIDR을 다시 잘라서 쓰는 작은 네트워크 조각
- Public / Private 구분은 라우팅 + 게이트웨이 설정으로 갈림
- Route Table: “이 IP 대역으로 가는 트래픽은 어디로 보낼지” 정해놓은 길 안내판
- Gateway: 서로 다른 네트워크 사이를 연결해주는 출입구
AWS 입장에서 보면:
VPC = 내 사설망Subnet = AZ 안에 있는 작은 방Route Table = 방마다 걸려 있는 안내판IGW / NAT GW = 건물 밖으로 나가는 문
1. VPC는 원래 완전 고립된 사설망이다
VPC는 이름 그대로 Virtual Private Cloud라서
처음 만들었을 때 상태만 놓고 보면, 그냥 외부랑 완전 단절된 사설망이다.
- 인터넷으로 나갈 길이 없음
- 다른 VPC나 온프렘이랑도 연결 안 돼 있음
- 심지어 같은 AWS 계정 안의 다른 VPC랑도 바로 통신 안 됨
이걸 외부(인터넷 / 다른 네트워크) 와 이어주는 역할을 하는 게
Internet Gateway, NAT Gateway, VPC Peering, VPN, Direct Connect 같은 애들이다.
이 중에서 “인터넷” 관점에서 중요한 애가 IGW / NAT라서 그 둘을 먼저 정리한다.
2. IGW (Internet Gateway) – VPC와 Network 통로
IGW는 VPC 입장에서 보면
내 사설망을 공인 인터넷이랑 이어주는 출입문이다.
IGW가 하는 일
- Public Subnet에 있는 EC2에 브라우저로 접속할 때
- EC2에서 npm install, apt update 같은 거 외부로 요청 보낼 때
- ALB가 인터넷에서 클라이언트 요청을 받아올 때
이 모든 트래픽이 결국 IGW를 지나간다.
IGW가 없으면, 그냥 인터넷이랑은 단절된 네트워크라고 보면 된다.
IGW가 “접근을 막아주진 않는다”
IGW는 그냥 문이고,
그 문을 통해 들어오고 나가는 걸 필터링하는 건 다른 애들 역할이다.
현업에서 “게이트웨이 쪽에 WAF 붙여서 중국 IP 막았다” 같은 말을 들으면
거기서 말하는 게이트웨이는 보통 API Gateway / ALB / CloudFront 같은 L7 프록시 계열이다.
- Internet Gateway
- VPC ↔ 인터넷 사이를 이어주는 L3~L4 출입문
- VPC 하나에 Attach 가능한 IGW는 1개
- API Gateway / ALB / CloudFront
- HTTP/HTTPS 요청을 받아서 서비스나 백엔드로 전달해주는 리버스 프록시
- 여기다가 WAF 붙이고, IP 차단, 레이트 리밋 등을 거는 것
3. NAT Gateway – Private Subnet과 Network 통로
Private Subnet은 Public Subnet과 달리 공인 IP가 없기 때문에 Private Subnet은 인터넷에서 직접 들어올 수는 없는 서브넷이다.
그런데 내부 서버도:
- 패키지 업데이트 해야 하고
- 외부 API 호출해야 하고
- S3에서 뭔가 받아올 수도 있고
어쨌든 밖으로 나갈 일은 많다.
이걸 도와주는 게 NAT(Network Address Translation) Gateway다.
NAT가 하는 역할
NAT는 “사설 IP ↔ 공인 IP”를 바꿔 끼워주는 애다.
예를 들어 Private Subnet에 10.0.1.15 라는 EC2가 있다고 해보면,
- 내부에서 실제로 나가는 요청은
10.0.1.15:5000 → 8.8.8.8:80 - NAT가 이걸
3.123.45.67:62000 → 8.8.8.8:80이런 식으로 바꿔서 인터넷으로 내보낸다.
(3.123.45.67은 NAT의 공인 IP 느낌)
외부 서버 입장에서는 “3.123.45.67이 요청 보냈네?” 하고 응답하고,
그 응답이 다시 NAT로 돌아오면 NAT가 내부 세션 테이블 보고
다시 10.0.1.15:5000으로 돌려보낸다.
“단방향”이란 게 무슨 뜻인지
NAT Gateway를 설명할 때 흔히 “단방향”이라고 말하는데,
이건 요청을 누가 먼저 시작하냐의 관점이다.
- 내부에서 먼저 나간 요청에 대한 응답은 다시 돌아올 수 있음
- 하지만 외부에서 먼저 Private Subnet으로 들어오는 건 막힌다
그래서 NAT를 통과해서 세션이 시작되는 방향이 항상 Private → Internet이고,
이게 단방향이라고 부르는 이유다.
NAT Gateway는 어디에 위치하냐
AWS 콘솔 상으로는 어느 서브넷에 NAT Gateway를 만든다고 되어 있어서
“이 서브넷 안에 있는 장비인가?” 싶은데, 실제론 좀 더 추상화된 매니지드 서비스 느낌이다.
- NAT Gateway는 보통 Public Subnet에 만든다
- 여러 개의 Private Subnet이 하나의 NAT Gateway를 공유해서 쓴다
- AZ마다 NAT를 따로 두는 게 권장 패턴 (NAT Gateway는 AZ 수준 리소스라서)
라우팅 테이블에서는 대략 이런 구성을 한다:
- Private Subnet Route Table
0.0.0.0/0 → NAT Gateway - Public Subnet Route Table
0.0.0.0/0 → Internet Gateway
트래픽 동선은 이런 식으로 흐른다:
Private EC2 → NAT GW → IGW → Internet
Internet → IGW → NAT GW → Private EC2 (응답만)
4. 인스턴스끼리는 어떻게 통신할까? – Route Table + AZ
이제 “VPC 안에서끼리” 통신 얘기
같은 VPC 안이면 기본적으로 내부 통신이 열린다
각 Subnet은 Route Table 설정을 가지고 있다.
Route Table을 보면 자동으로 하나 들어 있는 항목이 있다.
10.0.0.0/16 → local
이 엔트리는 지우지도 못한다. 여기 들어가 있는 CIDR 범위는 해당 VPC의 CIDR 블록 전체다. 이 말은: 같은 VPC 안에 있는 Subnet끼리는 CIDR만 맞으면 무조건 VPC 내부망(local) 을 통해 통신한다는 뜻이다.
그래서:
-
Public Subnet의 EC2 → Private Subnet의 RDS
-
AZ A의 EC2 → AZ C의 EC2
전부 별도 라우팅 설정 없이 “local” 경로로 통신한다. 막고 싶으면 SG / NACL에서 막는 게 기본 패턴이다.
AZ가 달라도 인터넷을 타지 않는다
Subnet은 무조건 하나의 AZ에만 속한다.
그럼 AZ끼리 통신할 때 인터넷을 도는 거냐? 그런 건 아니고,
- AWS가 AZ 사이에 전용 백본망을 깔아놓음
- VPC 내부 트래픽은 이 전용선만 타고 돈다
- 인터넷으로 나갔다 들어오는 구조가 아니다
그래서 AZ가 달라져도 보통 지연이 1~2ms 수준이고,
감각적으로는 거의 LAN 통신이랑 비슷하게 느껴진다.
대신 AZ 간 트래픽에는 소량의 요금이 붙는다.
정리하면
- 같은 VPC, 같은 CIDR 안에서는.
- Route Table의 local 엔트리를 통해 항상 내부망으로 통신
- 통신 가능 여부는 결국
- SG / NACL이 허용하냐로 결정
번외. Gateway vs Proxy – 헷갈릴만한 포인트 한 번에 정리
비슷하게 들리지만 하는 일이 꽤 다른 애들이라.
한 번 정리해두면 클라우드 아키텍처 볼 때 머리 정리가 잘 된다.
Gateway
- 서로 다른 네트워크를 이어주는 출입문에 가까운 개념
- 네트워크 계층(L3~L4)에서 동작하는 경우가 많다
- AWS에서 예:
- Internet Gateway: VPC ↔ 공인 인터넷
- NAT Gateway: Private Subnet → Internet (요청 시작 방향이 내부)
- VPN Gateway / Transit Gateway: VPC ↔ 온프렘 / 다른 VPC
Proxy
- 같은 네트워크 안에서 요청을 대신 받아서 전달하는 중개자.
- 주로 애플리케이션 계층(L7)에서 동작
- AWS에서 예:
- ALB / NLB: 리버스 프록시 + 로드밸런서
- API Gateway: HTTP API 입구
- CloudFront: 글로벌 캐싱 프록시 + 리버스 프록시
Gateway는 “경계”, Proxy는 “대리인” 정도로 생각하고 있다.
마무리
정리해보면
- VPC는 기본적으로 완전히 고립된 사설망
- 바깥 세상과 이어주는 통로는
- Public 쪽은
IGW - Private 쪽 Outbound는
NAT GW
- Public 쪽은
- 내부 통신은
Route Table의 local 덕분에 자연스럽게 열려 있고,
최종 허용/차단은SG와NACL이 담당 - Gateway는 네트워크를 잇는 출입문 쪽 개념,
Proxy는 요청을 받아 대신 전달해주는 애플리케이션 계층 개념